home *** CD-ROM | disk | FTP | other *** search
- ZX-SPECTRUM Emulator V1.0
- =========================
-
- 1. Einleitung
- -------------
- Wozu ein ZX-Spectrum Emulator? - Nun, wer diesen Computer höchstens dem Namen
- nach kennt, kann obige Frage berechtigt stellen. Der mindestens ebenso
- erfolgreiche Nachfolger des legendären ZX-81 ist ein 8-Bit Rechner mit 48 kB
- Hauptspeicher, 256 x 192 Pixel Grafikschirm in 16 Farben (max. 2 Farben pro
- Zeichenposition) und Pieps-Sound. Hoffnungslos veraltet also für einen
- verwöhnten ST-User.
- Wer aber, wie der Autor, seinerzeit seine ersten Programmierfrustrationen am
- ZX-81 erlebte, und dann hoffnungsvoll auf den ZX-SPECTRUM wechselte, wird
- dieses Gerät für immer wohlwollend im Gedächtnis behalten. Umfangreiches
- Basic, nahezu unerschöpflicher Speicher (für ZX-81 Verhältnisse), üppige
- Farbenpracht und sogar die Möglichkeit Töne zu erzeugen. Binnen kürzester
- Zeit brach eine Softwareflut über diesen Rechner herein, weil er äußerst
- einfach und komfortabel zu programmieren war. Etliche der heute am ST-Sektor
- bekannten Software-Firmen haben sich damals am Spectrum erste Lorbeeren
- geholt. Kurzum: Er ist es schon wert, in Erinnerung behalten zu werden, der
- alte "Specci" und der Autor hofft durch die Übertragung auf den Atari ST noch
- lange ab und zu einen Blick auf ihn werfen zu können. (Sollte ja schließlich
- auch am TT und vielleicht auch noch am SF - so müßte der Nachfolger des TT
- logischerweise heißen - noch funktionsfähig sein). Und mag sein, daß es noch
- ein paar Leutchen gibt, die ähnlich empfinden... Ihnen ist dieser Emulator
- gewidmet!
-
- Der Autor möchte an dieser Stelle ganz besonders Christoph Zwerschke, dem
- Verfasser des superben ZX-81-Emulators für den ST, seinen Dank aussprechen.
- Erst angesichts dieser Demonstration der prinzipiellen Machbarkeit eines
- ZX-Emulators war meine Motivation wieder einmal groß genug, um die schon
- jahrelang angesammelten Pläne endlich in die Tat umzusetzen. Gerne gebe ich
- auch zu, im Werke meines Vorbildes mich ein wenig belehrt zu haben. Nach einem
- halben Jahr zäher Optimierungen und Ringen um jeden Taktzyklus, immer wieder
- unterbrochen von grausamen Abstürzen und wunderlichen Effekten am Bildschirm
- kann an der Eigenständigkeit dieses Programmierepos nicht gezweifelt werden.
-
- Ein riesiges Danke auch an meine Frau (die nun endlich aufatmen kann) für ihr
- Verständnis und die seelische Unterstützung in dieser Zeit.
-
- 2. Leistung der Emulation
- -------------------------
- Der ZX-SPECTRUM wird erstaunlich vollständig emuliert. Der einzige wirklich
- erwähnenswerte Unterschied zum Original ist, daß das Hardware-Blinken
- (FLASH), das der Spectrum als Video-Attribut zur Verfügung stellt, aus
- Geschwindigkeitsgründen (vielleicht am TT dann) nicht unterstützt wird.
- Stattdessen werden Zeichen mit dem FLASH-Attribut invers dargestellt. Am
- deutlichsten zu merken beim Cursor im ZX-Basic, der am Original blinkt, beim
- Emulator aber bloß invertiert ist. Damit läßt sich leben.
-
- Ansonsten kann aber mit folgenden Features aufgewartet werden:
-
- - Die zugrundeliegende Emulation des Z80-Prozessors unterstützt sämtliche
- Opcodes, auch die Operationen mit den Indexregister-Hälften und andere
- 'nichtoffizielle' Z80-Befehle, und die vollständige Interruptlogik des
- Z80 (Interrupt-Mode 2 wird in vielen Programmen am Spectrum verwendet).
-
- - Die Video-Emulation stellt alle 16 Farben des Spectrum (8 Farbtöne in
- jeweils zwei Intensitäten) sowohl am Farbmonitor, als auch am monochromen
- Monitor (in Graustufen) dar.
-
- - Die I/O-Operationen für Tastatur, Lautsprecher und BORDER-Farbe (Farbe
- des Bildschirmrandes) werden originalgetreu umgesetzt. Ein am
- Joystick-Port des ST angeschlossener Joystick wird als KEMPSTON- und
- IF2-kompatibler Joystick (zwei Standards am Spectrum) emuliert.
-
- - Das Kassetten-Handling des Spectrum wird vollständig auf Disk umgelenkt.
- Bei Angabe eines Dateinamens beim Laden (LOAD "name"), und beim Speichern
- (SAVE "name") ist dieser Vorgang transparent. Das Laden des erstbesten
- Programmes vom Band via LOAD "", ist natürlich für Disks sinnlos - es
- erscheint ein Fileselektor, aus welchem eines der vorhandenen Programme
- ausgewählt werden kann.
-
- 3. Start des Emulators
- ----------------------
- Es werden die Dateien SPECCI.PRG und SPECCI.DAT in einem beliebigen
- Verzeichnis auf Diskette oder Festplatte benötigt. Nach Starten von
- SPECCI.PRG erscheint ein Titelschirm während die Datei SPECCI.DAT nachgeladen
- wird und die Initialisierung des Emulators durchgeführt wird. Dies dauert ein
- wenig, weil umfangreiche Tabellen im Speicher angelegt werden. Es sollten
- auch mindestens ca. 800 kB Speicher frei sein, also auf ST's mit 512 kB Ram
- oder 1040ern mit zuvielen installierten Accessories läuft die Emulation nicht
- (es erscheint eine Alertbox).
- Geschrieben und getestet wurde der Emulator auf einem 1040 STF mit 1 Mb
- Speicher und TOS 1.0. Er sollte aber zumindest am ST unter jeder TOS-Version
- laufen und sich auch mit Festplatten vertragen. Solange bloß genug
- Hauptspeicher vorhanden ist...
-
- Falls der Emulator am Farbmonitor verwendet wird, bitte zuerst in die niedrige
- Auflösung schalten (ansonsten erscheint eine Alertbox). In der monochromen
- Auflösung werden die Farben durch Graustufen ersetzt.
-
- Nach geglückter Initilisierung beginnt der normale Spectrum-Bootvorgang,
- gefolgt von der Einschaltmeldung: der ST ist jetzt ein nahezu originaler
- ZX-SPECTRUM. (Bis auf die Geschwindigkeit allerdings, I did my best... am TT
- sollte die Emulation ca. so schnell wie das Original sein - mal sehen).
-
- 4. Bedienung des Emulators
- --------------------------
- Die Belegung der Spectrum-Tastatur wurde so getreu wie möglich auf den ST
- Übertragen. Folgende Tabelle zeigt die Belegung der Spectrum-Tasten, die am
- ST entweder nicht als solche existieren oder anders belegt sind:
-
- ZX-SPECTRUM entspricht am ST Bemerkung
- -----------------------------------------------------------------------
- Symbol-Shift Alternate oder Umschalt-Taste am Spectrum
- rechte Shift-Taste
- Caps-Shift Linke Shift-Taste temporäre Umschaltung Groß/Klein
- Z Y Weil Spectrum englische Tastatur hat,
- Y Z wurde dies auch am ST beibehalten
-
- Zwecks Komfort wurden einige oft verwendeten ZX-Shift-Kombinationen auf
- eine der sonst unbenutzten ST-Tasten gelegt, wie aus nachstehender Tabelle
- hervorgeht:
-
- ST-Taste entspricht am ZX-SPECTRUM Bemerkung
- -----------------------------------------------------------------------
- Control Caps-Shift+Symbol-Shift EXTENDED-MODE
- F1 Caps-Shift+1 EDIT
- F2,CapsLock Caps-Shift+2 CAPS LOCK
- F3,Tab Caps-Shift+3 TRUE VIDEO
- F4,Esc Caps-Shift+4 INVERSE VIDEO
- Cursor links Caps-Shift+5 Cursor nach links
- Cursor runter Caps-Shift+6 Cursor nach unten
- Cursor rauf Caps-Shift+7 Cursor nach oben
- Cursor rechts Caps-Shift+8 Cursor nach rechts
- F9 Caps-Shift+9 GRAPHICS-MODE
- Delete,BS Caps-Shift+0 DELETE
- F10 Caps-Shift+Space BREAK (Programmabbruch)
- < Symbol-Shift+O ; (Strichpunkt)
- ~ Symbol-Shift+P " (Hochkomma)
- ß Symbol-Shift+C ? (Fragezeichen)
- ö Symbol-Shift+L = (Ist gleich)
- ä Symbol-Shift+Z : (Doppelpunkt)
- ü Symbol-Shift+2 @ (Absatz)
-
-
- Emulator-Steuertasten:
-
- ST-Taste Wirkung Bemerkung
- -----------------------------------------------------------------------
- F6 Reset Entspricht Reset-Knopf beim Spectrum 1)
- Help Tasten-Hilfe ZX-Tastaturschablone wird eingeblendet 2)
- Undo Farbschaltung Umschaltung farblos-Farbdarstellung 3)
- Insert Unterbrechung Erscheint Alert DESKTOP|RESET|CONTINUE
- Shift-F6 Desktop Emulator beenden (ohne Abfrage)
-
- 1) Eine Kopie des ZX-Roms wird in den Rom-Bereich des Emulators geschrieben
- der Z80-Emulator zurückgesetzt und beginnt wieder bei PC=0.
-
- 2) Am Farbmonitor wird nur ein Viertel der Schablone auf einmal eingeblendet,
- mehrmaliges Drücken von HELP zeigt die restlichen Viertel.
- Jede Taste außer HELP kehrt zur Emulation zurück, die Taste wird gleich
- übernommen.
-
- 3) Der Display-File des Spectrum besteht aus Pixeldaten und Attributdaten.
- Bei 'farbloser' Darstellung werden die Attributdaten nicht beachtet -
- die Emulation wird etwas schneller.
-
-
- 5) Laden und Speichern von Programmen
- -------------------------------------
- Programme, Speicherbereiche, Strings und Arrays werden genauso wie am
- Original gespeichert: SAVE "name" [CODE, DATA, SCREEN$]. "name" sollte
- allerdings nur aus maximal acht Zeichen bestehen (am Spectrum sind 10 Zeichen
- möglich).
- Das Laden funktioniert analog, mit einer Ausnahme: Weist am Original der
- Befehl LOAD "" (Leerstring) an, das nächste am Band daherkommende Programm zu
- laden, so ist dies im Diskbetrieb nicht anwendbar. STATTDESSEN ERSCHEINT EINE
- AUSWAHL-MASKE. Je nachdem, ob der Ladebefehl für Programme, CODE-Files oder
- Variablen war, erscheint nur die Liste der vorhandenen Dateien des jeweiligen
- Typs.
-
- Erläuterungen zur Dateiauswahlmaske:
-
- Noramlerweise wird versucht die Datei INHALT.INF im aktuellen Ordner
- einzulesen, welche die Namen und Headerdaten aller Spectrum-Dateien in diesem
- Verzeichnis enthält. Sollte das File INHALT.INF nicht vorhanden sein (wie
- gesagt, für jedes Verzeichnis separat), so wird das Verzeichnis nach
- Spectrum-Dateien 'durchgescannt', was einige Zeit dauern kann. Am Schluß wird
- versucht, die Datei INHALT.INF zu schreiben, was eventuell zum System-Alert
- 'Disk schreibgeschützt' führen kann - also am besten Disketten nicht mit
- Schreibschutz einlegen.
- Angezeigt werden der Dateiname, die Länge in Bytes und die Startadresse (bei
- Typen CODE,DATA) bzw. Auto-Start-Zeile (bei Basic-Programmen).
- Die Auswahl einer Datei erfolgt mit den Cursortasten 'Up' und 'Down' und
- 'Return' zum Abschluß. Am oberen Bildschirmrand ist der aktuelle Pfad
- angezeigt und kann editiert werden. Hat man einen neuen Pfad eingegeben
- (nicht mit 'Return' abschließen!) so kann mit Lese.INF (F1) das
- Inhaltsverzeichnis eingelesen werden.
- Das Inhaltsverzeichnis wird beim Speichern von Programmen, nicht automatisch
- aktualisiert, sondern muß mittels Rescan (F2) neu erzeugt werden.
- Mit der Taste 'Escape' kann die Dateiauswahl verlassen werden, ohne etwas zu
- laden (Spectrum 'Tape Loading Error').
-
- 6. Interna
- ----------
- Der Spectrum-Emulator krempelt die Systemvektoren- und Werte ziemlich um.
- VBL-Routinen werden abgeschalten, Tastatur und Timer-Vektoren manipuliert und
- der Soundchip umprogrammiert. Bus- und Adressfehler werden abgefangen und der
- Illegal-Vektor für die Interrupt-Simulation des Z80 verwendet. Daher ist es
- auch durchaus möglich, daß das Programm sich mit anderen im Speicher
- liegenden Vektorverbiegern nicht verträgt.
-
- 7. Verlassen des Emulators
- --------------------------
- Durch Drücken von Shift-F6 wird ohne Abfrage sofort zum Desktop
- zurückgekehrt. Dabei werden sämtliche Systemwerte, die verändert wurden
- (Vektoren, Farbpalette, Soundregistereinstellung etc.) auf die alten Werte
- zurückgesetzt.
-
- 8. Zum Abschluß einige Spectrum-Dokumentationen
- -----------------------------------------------
-
- Speicheraufteilung (Adressbereich: 0-65535)
- --------------------------------------------------------------------------
- 00000-16383 ROM
- 16384-22527 Display-File (Pixeldaten)
- 22528-23295 Attribut-File (Farben und Attribute, zeichenorienteiert)
- 23296-23551 Drucker-Buffer (beliebter temporärer Speicher)
- 23552-23733 System-Variablen
- 23734-23754 Systembereich für I/O
- 23755- Basic-Programm-Speicher + Variablen
- Am oberen Speicherende jede Menge Systembereiche, Stacks und User-Grafik.
-
- Interessante Systemvariablen (Worte sind im Low-High-Format!):
-
- Adresse Länge Name Beschreibung
- --------------------------------------------------------------------------
- 23561 1 REPDEL Zeit in 1/50 Sekunden für Tastatur-Repeat
- 23562 1 REPPER Verzögerung in 1/50 Sekunden zwischen Repeats
- 23606 2 CHARS Zeiger auf Zeichensatzadresse - 256
- 23609 1 PIP Länge des Tastaturklicks (man versuche z.B. 10)
- 23627 2 VARS Zeiger auf Variablen-Bereich des Programms
- 23635 2 PROG Zeiger auf Programm-Bereich (normalerweise 23755)
- 23672 3 FRAMES 3 Byte Zähler (Low - High). Alle 20ms inkrementiert
- 23692 1 SCRCT Anzahl der Scrolls des Screens bevor die Frage
- "scroll?" erscheint.
- 23730 2 RAMTOP Adresse der letzten Speicherstelle für Basic
- 23732 2 P-RAMT Adresse der physikalisch letzten Speicherstelle
-
- Interessante Systemaufrufe
- --------------------------------------------------------------------------
- RANDOMIZE USR 3280 Scroll um eine Zeile nach oben
- PRINT 65536-USR 7962 Freier Speicher
- RANDOMIZE USR 0 Soft-Reset des Spectrum
-
-
- 9. Last but not least
- ---------------------
- Das war's. Allen jenen, die den Spectrum überhaupt nicht kennen, seinen die
- Programme "demo1" und "tutor" zum Aufruf empfohlen.
-
- Würdigungen, Lob, sowie Anregungen und Kommentare bitte an folgende
- Adresse:
-
- Christian Gandler
- Paletzgasse 17/3/14
- A-1160 Wien
-
-
- Viel Spaß und Ciao!
-
- cg, 17.03.91
-
-
- Version 1.1 vom 14/05/1991
- --------------------------
-
- Einige Mängel (und auch Fehler) wurden behoben, die Betriebssicherheit erhöht.
- Außerdem unterstützt der Emulator nunmehr das berüchtigte Interface I und die
- Microdrives.
-
- Im Detail sind es folgende Änderungen gegenüber der Version 1.0:
-
- - Trap 7 Vektor wurde beim Verlassen des Emulators nicht rückgesetzt.
-
- - Fileselektor liest INHALT.INF problemlos ein (In V1.0 war mitunter
- mehrmaliges Drücken von F1 notwendig). Weiters bleibt die Seite der Liste
- aktiv für den nächsten Aufruf. Der Bildschirm-Modus wird nicht mehr
- umgeschalten, beim Verlassen des Selektors.
-
- - Beim Laden aus Anwendungen heraus, erschien in V1.0 automatisch der File-
- selektor. Numehr werden der Reihe nach alle Dateien des Typs 'Code' ange-
- boten, was in der Regel früher oder später zum Erfolg führt. Durch
- Gedrückthalten von 'Control' oder 'Alternate' beim Aufruf der Ladeoperation
- erscheint der Fileselektor wie gewohnt.
-
- - Bei Unterbrechung via 'Insert' werden jetzt alle Z80-Register angezeigt.
-
- - Geringfügige Beschleunigung der Emulation
-
- - Interface 1 & Microdrives:
- --------------------------
- Der Autor setzt voraus, daß der Leser dieser Zeilen Bescheid weiß, was mit
- Interface I' und 'Microdrive' gemeint ist, weil für alle, die damit nichts
- anfangen können, ein mehrseitiger Exkurs notwendig wäre. Darum nur für alte
- Sinclair-Hasen folgende Erläuterungen:
-
- Durch Gedrückthalten von 'Control' oder 'Alternate' während des
- Emulatorstarts vom Desktop (bis zum Ertönen eines Glockenschlags) wird
- der Spectrum mit dem Interface I ausgestattet. Es stehen dann also die
- fingerverstauchenden Kommandos wie LOAD *"m";1;"name" zur Verfügung.
-
- Damit ein Microdrive angesprochen werden kann, ist aber noch ein wenig
- Vorarbeit nötig. Zunächst muß auf irgendeine Weise - zum Beispiel mit
- einem kleinen Basic-Programm (ST) eine Datei namens :MD1 (statt der '1'
- auch 2...8, je nachdem unter welcher Nummer das Microdrive verwendet
- werden soll) erzeugt werden, die genau 132240 Bytes Länge hat. Das ist
- der benötigte Platz für 254 Sektoren zu 512 Bytes plus Verwaltungsbuffer
- von 8192 Bytes. In GFA-Basic z.B. könnte so ein Programm so ausschauen:
-
- OPEN #"o",#2,"\SPECTRUM\:MD1"
- x$=SPACE$(8192)
- PRINT #2;X$;
- X$=SPACE$(512)
- FOR i=1 TO 254
- PRINT #2;x$;
- NEXT i
- CLOSE #2
-
- Diese Datei muß wie angedeutet im selben Verzeichnis angelegt werden, in
- dem sich der Emulator (SPECCI.PRG) befindet.
-
- Vom Emulator aus muß das Microdrive wie am Original zunächst formatiert
- werden, bevor es verwendet werden kann. Dies geschieht wie gewohnt mit
- dem Kommando FORMAT "m";1;"name".
-
- Es stehen ab jetzt sämtliche Microdrive-Kommandos zur Verfügung.
- Außerdem kann ein Drucker über RS232-Kommandos betrieben werden (auch
- wenn er am Centronics-Port hängt). Beispiel: FORMAT "t",9600: LIST *t
- -> sendet ein Basic-Listing an den Drucker (oder was immer an der RS232
- oder Centronics-Schnittstelle hängt).
-
- Version 1.2 vom 02/06/1991
- --------------------------
-
- Der Emulator ist jetzt wirklich getester Weise voll harddisk-fähig und läuft
- am Mega STE 4 mit 16 MHz und eingeschaltenem Cache ohne Probleme (und rund
- doppelt so schnell wie am 1040).
-
- TT-Version vom 23/07/1991
- -------------------------
-
- Wie zu erwarten, konnte ich nicht eher ruhig schlafen, bevor nicht eine
- Version des Emulators für den Atari TT programmiert war...
- Aufgrund der verschiedenen Prozessor-Architektur des 68030 waren etliche
- Änderungen im Algorithmus notwendig, sodaß ich eine eigene Version für den TT
- entwickelte, um den Sourcecode nicht allzu unübersichtlich werden zu lassen.
- Am TT muß die Datei SPECCITT.DAT in SPECCI.DAT unbenannt werden, um den
- Emulator einzurichten (Originale Datei SPECCI.DAT - die ST-Version - vorher
- löschen!). Der Emulator läuft am TT in der niedrigen und hohen ST-Auflösung,
- wobei der Cache des 68030 eingeschaltet bleiben kann.
-
- Nebenbei habe ich nun auch die Flash-Attribute des Spectrum emuliert, weil der
- TT genügend Rechenleistung dafür hat. Die UNDO-Taste schaltet jetzt zwischen
- drei verschiedenen Bildschirmmodi um:
-
- 1) Flash wird emuliert (Nach Aufruf aktiv)
- 2) Flash-Attribute invers dargestellt
- 3) Attributlose Darstellung
-
- Leider ist der Sound am TT relativ leise, weil der Lautsprecher nicht mehr im
- Monitor integriert ist.
-
- Puncto Geschwindigkeit läßt sich sagen, daß sie im Durchschnitt der des
- Originals gleicht. Allerdings wirklich nur im Durchschnitt - manche Programme
- laufen mit 70%, andere dafür wieder mit 200% ab. Dies liegt daran, daß die
- verschiedenen Z80-Befehle unterschiedlich beschleunigt werden - ein generelles
- Problem der Prozessor-Emulation.
-
- Noch konnte ich den Emulator mangels TT-Ram noch nicht in diesem schnellen Ram
- ablaufen lassen, aber vermutlich dürfte die Geschwindigkeits-Steigerung dann
- fast schon zu hoch sein.
-
- Somit lege ich nun endlich die Entwicklung des ZX-Spectrum-Emulators (bis auf
- Widerruf) zu den Programmier-Akten (=Backups) und Ihnen das fertige Ding unter
- Ihre Sammlung.
-
- Falls Sie ein Spectrum-Freak waren (sind?), schreiben Sie mir doch, ob Ihnen
- die Emulation gefällt - würde mich freuen!
-
- Tschüß!
-